package tacos.domain;

import lombok.AccessLevel;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.RequiredArgsConstructor;

import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.Id;

@Data  // data 注解会为我们添加一个有参的构造器，但是使用@NoArgsConstructor之后，这个构造器就会被移除掉，现在我们显示添加@RequiredArgsConstructor有参构造器
@RequiredArgsConstructor //需要参数构造器
@NoArgsConstructor(access = AccessLevel.PUBLIC, force = true)  // p74 JPA需要实体有一个无参构造器，PRIVATE 变成私有的，
// 因为这里必须要设置final属性，所以我们将force设置为true，这样Lombok生成的构造器就会将它们设置为null
@Entity   // 声明这是一个JPA实体
public class Ingredient {
    @Id // 使用ID注解，将其指定为数据库中唯一标识该实体的属性
    private final String id;
    private final String name;
    @Enumerated(EnumType.STRING)  // 这个配置是告诉jpa,此处的枚举类型的默认值是(name)String,否则就会以序号(ordinal)(Integer)作为枚举类型的默认值，就会报错
                                    // https://blog.csdn.net/qq_38157516/article/details/80540505
                                    // https://stackoverflow.com/questions/56942170/getting-numberformatexception-using-spring-data-jpa
    private final Type type;

    public static enum Type {
        WRAP, PROTEIN, VEGGIES, CHEESE, SAUCE
    }
}
